package Work20241106;

/**
 * @author zdl
 * @date 2024/11/6
 */

import java.util.Scanner;

/**
 * 循环作业
 */
public class Demo5 {
    public static void main(String[] args) {
        /**
         * 题目1: 使用if.elseif
         * 学生的成绩：
         * 90-100:打印优秀
         * 80-90：打印良好
         * 70-80：打印一般
         * 60-70：打印及格
         * 60分以下:叫家长
         */

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生成绩(1-100)：");
        int score = sc.nextInt();
        if (score > 100 || score < 0) {
            System.out.println("输入分数有误，退出程序!");
            System.exit(0);
        }
        if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良好");
        } else if (score >= 70) {
            System.out.println("一般");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("叫家长");
        }
        System.out.println("===========================================");
        /**
         * 题目2: 从键盘输入一个整数，判断是否能被3或者被5整除。
         * 能的话输出："该数是3或5的倍数",
         * 否则输出："该数不能被3或5中的任何一个数整除"
         */
        System.out.println("请输入一个整数：");
        int num = sc.nextInt();
        if (num % 3 == 0 || num % 5 == 0) {
            System.out.println("你输入的" + num + "是3或5的倍数");
        } else {
            System.out.println("该数不能被3或5中的任何一个数整除");
        }
        System.out.println("===========================================");
        /**
         * 题目3: 用户使用键盘输入两个数a和b，
         * 如果a能被b整除或者a加b大于100，则输出a，否则输出b。
         */
        System.out.println("请输入两个整数：");
        int a = sc.nextInt();
        int b = sc.nextInt();
        if (a % b == 0 || a + b > 100) {
            System.out.println(a);
        } else {
            System.out.println(b);
        }
        System.out.println("===========================================");
        /**
         * 题目4: 按照年龄划分，
         * 60以上是老年人,
         * 40-60是中年人,
         * 20-40青年人,
         * 10-20青少年,
         * 10岁以下儿童。
         */
        System.out.println("请输入年龄：");
        int age = sc.nextInt();
        if (age > 130 || age < 0) {
            System.out.println("输入年龄有问题，建议修仙！！");
            System.exit(0);
        }
        if (age >= 60) {
            System.out.println("老年人");
        } else if (age >= 40) {
            System.out.println("中年人");
        } else if (age >= 20) {
            System.out.println("青年人");
        } else if (age > 10) {
            System.out.println("青少年");
        } else {
            System.out.println("儿童");
        }
        System.out.println("===========================================");
        /**
         * 题目5: 会员购物时，根据输入积分的不同享受不同的折扣
         * 计算会员购物时获得的折扣输出实付金额
         * 会员积分x 折扣
         * x < 2000 9折
         * 2000 <= x <4000 8折
         * 4000 <= x < 8000 7折
         * x > 8000 6折
         */
        System.out.println("导购员输入未打折时的金额为多少：");
        double money = sc.nextDouble(); //未打折的金额
        double newMoney; // 打折后的金额
        System.out.println("请输入您的会员积分：");
        double points = sc.nextDouble();
        if (points > 8000) {
            newMoney = money * 0.6;
            System.out.println("您的会员积分大于8000，为您打6折，应收您：" + money + "，打折后为：" + newMoney);
        } else if (points >= 4000) {
            newMoney = money * 0.7;
            System.out.println("您的会员积分为" + points + "，为您打7折，应收您：" + money + "，打折后为：" + newMoney);
        } else if (points >= 2000) {
            newMoney = money * 0.8;
            System.out.println("您的会员积分为" + points + "，为您打8折，应收您：" + money + "，打折后为：" + newMoney);
        } else {
            newMoney = money * 0.9;
            System.out.println("您的会员积分为" + points + "，为您打9折，应收您：" + money + "，打折后为：" + newMoney);
        }
        System.out.println("===========================================");
        /**
         * 题目6: 输入一个数,判断是不是水仙花数
         * (水仙花是一个三位数，这个数的个位的立方+十位的立方+百位的立方==他本身：
         *   153 = 1 + 125 + 27)
         */
        System.out.println("请输入一个三位数：");
        int number = sc.nextInt();
        int units = number % 10; //个位
        int decade = number / 10 % 10; //十位
        int hundred = number / 100; //百位
        if (units*units*units + decade*decade*decade +hundred*hundred*hundred == number){
            System.out.println("你输入的"+number+"是一个水仙花数");
        }else {
            System.out.println("不是水仙花数");
        }
        System.out.println("===========================================");
        /**
         * 题目7: 输出所有水仙花数-
         */
        System.out.println("所有的水仙花数为：");
        for (int i = 100; i < 1000; i++) {
            int units1 = i % 10; //个位
            int decade1 = i / 10 % 10; //十位
            int hundred1 = i / 100; //百位
            if (units1*units1*units1 + decade1*decade1*decade1 +hundred1*hundred1*hundred1 == i){
                System.out.print(i+"\t");
            }
        }
        System.out.println();
        System.out.println("===========================================");
        /**
         * 题目8: 计算1+3+5+...+99 的和
         */
        /**
         * 执行流程
         *  i=1,1<100 true sum = 0+1  i=i(1)+2
         *  i=3 3<100 true sum = 0+1+3 i=i(3)+2
         *  i=5 5<100 true sum=0+1+3+5 i=i(5)+2
         *  。。。。。。
         */
        int sum = 0;
        for (int i = 1; i < 100; i+=2) {
            sum = sum+i ;
        }
        System.out.println("1+3+5+...+99 的和为："+sum);

        /**
         * 执行流程
         * c(1)<100 true he=he(0)+c(1) c=c(1)+2
         * c(3)<100 true he=he(0)+c(1)+c(3) c=c(3)+2
         * ....
         */
        int he = 0;
        int c = 1;
        while ( c < 100){
            he += c;
            c+=2;
        }
        System.out.println("1+3+5+...+99 的和为："+he);
        System.out.println("===========================================");
        /**
         * 题目9: 输出100~1000的所有末尾为8的数字
         * 末尾为8 个位为8  i % 10
         */
        System.out.println("100~1000的所有末尾为8的数字有：");
        for (int i = 100; i < 1000 ; i++) {
            if ( i % 10 == 8){
                System.out.print(i+"\t");
            }
        }

        System.out.println();
        System.out.println("===========================================");
        /**
         * 题目10: 输出乘法口诀表
         */
        /**
         * 执行顺序
         *  i=1 1<=9 true
         *      内层循环
         *      j=1 1<=1 true sout(i*j) j++
         *      j=2 2<=2 false 内层循环结束，接着往下执行换行  i++
         *  i=2 2<=9 true
         *      内层循环
         *      j=1 1<=2 true sout(i*j) j++
         *      j=2 2<=2 true sout(i*j) j++
         *      j=3 3<=2 false 内层循环结束，接着往下执行换行  i++
         *  。。。。。
         *  i=9 9<=9 true
         *      内层循环
         *      j=1 1<=9 true sout(i*j) j++
         *      j=2 2<=9 true sout(i*j) j++
         *      j=3 3<=9 true sout(i*j) j++
         *      j=4 4<=9 true sout(i*j) j++
         *      j=5 5<=9 true sout(i*j) j++
         *      j=6 6<=9 true sout(i*j) j++
         *      j=7 7<=9 true sout(i*j) j++
         *      j=8 8<=9 true sout(i*j) j++
         *      j=9 9<=9 true sout(i*j) j++
         *      j=10 10<=9 false 内层循环结束，接着往下执行换行  i++
         *   i=10 10<=9 false 结束循环
         */
        for (int i = 1; i <= 9; i++) { //行
            for (int j = 1; j <= i; j++) {  //列
                System.out.print(i +"*"+j + "=" +i*j+"\t");
            }
            System.out.println();
        }

    }

}
